<?php
/**
* Classe de Validation générique d'un formulaire.
*
* @desc Cette classe 
*
* @version         1.0
*
* @name         formulaire
* @category     Fichier de Classe PHP
* @copyright     DS2I-Offshore© - 2010
* @package         Classes
*/
include_once(PATH_INCLUDE.'/inc_html_fonctions.php');

class valid_formulaire
{
    const _ERREUR_VIDE   = "Ce champs ne doit pas être vide";
    const _ERREUR_POST   = "Les informations renseignées dans le formulaire n'ont pas été transmise au serveur";

    /**
     * @desc    Tableau où sont référencées les erreurs.
     *
     * @var     array
     * @access  public
     */
    public $_erreurs = array();

    /**
     * @desc    Tableau des éléments de champs de formulaire passés en POST et à valider.
     *
     * @var     array
     * @access  private
     */
    private $_elements;

    /**
    * Constructeur
    *
    * @desc    Lance la m&éthode de validation du formulaire.
    *
    * @access  public
    * @param   array    Tableau des variables passées en post.
    * @return  void
    */
    public function __construct()
    {

    }

    /**
    * Parcours et valide les élements les uns après les autres.
    * 
    * @desc Cette méthode permet de parcourir tous les éléments d'un formulaire passé en POST
    *       et de vérifier, selon certaines règles, si les valeurs des élements sont conformes.
    *<br/>
    *        Pour établir les règles de vérification, il faut avoir nommé l'attribut 'name'
    *       des champs du formulaire selon une certaine norme :<br/>
    *<br/>
    *                XY_[Nom_de_l'élément]<br/>
    *<br/>
    *                X = Mandotory<br/>
    *                   O : Obligatoire<br/>
    *                   F : Facultatif<br/>
    *<br/>
    *                Y = type de l'élément<br/>
    *                   adresse ligne  1 :  A1
						adresse ligne  2 :  A2
						adresse ligne  3 :  A3
						civilite :  CI
						code :  CO
						code banque :  CB
						code guichet :  CG
						cle rib :  CR
						critere (de recherche) :  CS
						communication  :  CM
						date naissance :  DN
						date reglement :  DG
						date resiliation :  DS
						date survenance :  DV
						date declaration :  DD
						echeance : EC  
						email :  EM
						Justifcatif :  JU
						libelle :  LI
						lieu naissance :  LN
						mnt remboursement : MR 
						mnt prestation :  MP
						nom :  NO
						NOUVEAU num contrat :  NE
						num contrat :  NN
						num compte :  NM
						prenom :  PN
						mot de passe :  PW
						raison sociale :  RS
						ref externe :  RE
						ref reglement :  RR
						type :  TY
						Offre :  OF
						Produit : PR
						Formule : FM
						sexe :  SX
    *<br/>
    *       Exemple : un champ dont le name est ON_nomDuChamp correspond à un sType numérique obligatoire.<br/>
    *
    * @access  public
    *
    * @name    outils_formulaire::valider()
    * @param   array   Tableau associatif des variables à valider.
    * @return  bool    vrai si la validation s'est effectuée avec succès, faux sinon.
    */
    public function valider($aPost = null)
    {
    	$bValide = false;
    	if ( isset($aPost) && !empty($aPost) )
        {
        	$bValide = $this->initErreur();
            $this->_elements = $aPost;
            $bValide = true;
            
            $sDate_Debut_edition = $sDate_Fin_edition = $sDate_Debut_stat = $sDate_Fin_stat = '';
            $iMontantPre = $iMontantReg = '0';
            
            foreach ($this->_elements as $sNom => $sValeur)
            {
                $sMandatory = substr($sNom,0,1);
                $sType = substr($sNom,1,2);
                $sNomInfo = substr($sNom,4);
            
                if ($sMandatory == "O")
                {
                	switch($sType)
  					{
  						
  						case "A1":
   						 	// Verification de la premiere ligne d'adresse
			            	if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(adresse_ligne_un_vide);
			        		elseif(caracteres_interdits($sValeur)==1)
			        			$bValide = $this->ajouterErreur(adresse_ligne_un_spechar);
    						break;
						case "A2":
						   // Verification de la 2eme ligne d'adresse
		            		if(caracteres_interdits($sValeur)==1)
		        				$bValide = $this->ajouterErreur(adresse_ligne_deux_spechar);
						    break;
						case "A3":
						    // Verification de la 3e ligne d'adresse
			            	if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(adresse_ligne_trois_vide);
			        		elseif(caracteres_interdits($sValeur)==1)
			        			$bValide = $this->ajouterErreur(adresse_ligne_trois_spechar);
						    break;
						case "CB":
						   // Verification code banque
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(codebanque_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(codebanque_spechar);
					    	break;
					     case "CG":
						   // Verification code guichet
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(codeguichet_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(codeguichet_spechar);
					    	break;
					    case "CI":
					   		// Verification civilite
			            	if(!isset($sValeur) || $sValeur == "" || $sValeur == 0)
			        			$bValide = $this->ajouterErreur(civilite_vide);
			        		
					   		break;					   	
					    case "CM":
						   // Verification communication  : 
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(communication_vide);
			        		elseif(caracteres_interdits($sValeur)==1)
			        			$bValide = $this->ajouterErreur(communication_spechar);
					    	break;
					   	case "CO":
					   		// Verification du code
			            	if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(code_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(code_spechar);
					   		break;
					    case "CR":
						   // Verification cle rib
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(clerib_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(clerib_spechar);
					    	break;
					    case "CS":
						   // Verification critere (de recherche) :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(search_critere_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(search_critere_spechar);
					    	break;
					    
					    case "DD":
						   // Verification date declaration :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datedeclaration_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datedeclaration_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datedeclaration_incorrect);
					    	break;
					    case "DE":
						   // Verification date de debut :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datedebut_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datedebut_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datedebut_incorrect);
					    	break;
					    case "DF":
						   // Verification date de fin :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datefin_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datefin_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datefin_incorrect);
					    	break;
				    	case "DG":
						   // Verification date reglement :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datereglement_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datereglement_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datereglement_incorrect);
					    	break;
					    case "DN":
						   // Verification date naissance :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datenaissance_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datenaissance_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datenaissance_incorrect);
					    	break;
					    case "DR":
						   // Verification date règlement sinistre :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(date_reglement_sinistre_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(date_reglement_sinistre_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(date_reglement_sinistre_incorrect);
					    	break;
				    	case "DS":
						   // Verification date resiliation :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(dateresil_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(dateresil_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(dateresil_incorrect);
					    	break;
				    	case "DV":
						   // Verification date survenance :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(datesurvenance_vide);
			        		elseif(!datevalider($sValeur))
			        			$bValide = $this->ajouterErreur(datesurvenance_format);
			        		elseif(!datevalide($sValeur))
			        			$bValide = $this->ajouterErreur(datesurvenance_incorrect);
					    	break;
				    	case "EC":
						   // Verification echeance :   
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(echeance_vide);
			        		elseif(!is_numeric($sValeur))
			        			$bValide = $this->ajouterErreur(echeance_not_numeric);
					    	break;
					    case "EL":
						   // Verification choix element stat :   
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(element_stat_non_selectionne);
			        		
					    	break;
					    	
				    	case "EM":
						   // Verification email : 
						   if($_SESSION['idbloc']==dataObject_menu::BLOC_SYNTHESE_ID) 
						   		$sLibErr = synth_stats_email_vide;
						   elseif($_SESSION['idbloc']==dataObject_menu::BLOC_EDITIONS_ID) 
						   		$sLibErr = edit_stat_mail_vide;
						   		
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur($sLibErr);
			        		//elseif(caracteres_interdits_2($sValeur)==1)
			        		//	$bValide = $this->ajouterErreur(email_spechar); 
			        		elseif(checkEmail($sValeur)==0) 
			        			$bValide = $this->ajouterErreur(email_format);
					    	break;
					     case "FM":
						   // Verification formule :  
		            		if(!isset($sValeur) || $sValeur == "" || $sValeur == 0)
			        			$bValide = $this->ajouterErreur(formule_vide);
					    	break;
				    	case "JU":
						   // Verification Justifcatif :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(justificatif_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(justificatif_spechar);
					    	break;
					    case "LE":
						   // Verification choix listes edition :   
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(listes_edition_non_selectionne);
					    	break;
				    	case "LI":
						   // Verification libelle :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(libelle_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(libelle_spechar);
					    	break;
				    	case "LN":
						   // Verification lieu naissance :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(lieunaissance_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(lieunaissance_spechar);
					    	break;
				    	case "MP":
						   // Verification mnt prestation :
						   	if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(mnt_prestation_vide);
			        		elseif(!verifNumeric($sValeur))
			        			$bValide = $this->ajouterErreur(mnt_prestation_not_numeric);
					    	break;
					    case "MR":
						   // Verification mnt remboursement :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(mnt_remb_vide);
			        		elseif(!verifNumeric($sValeur))
			        			$bValide = $this->ajouterErreur(mnt_remb_not_numeric);
					    	break;
					    case "MS":
						   // Verification montant réglement sinistre :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(mnt_reglement_sinistre_vide);
			        		elseif(!verifNumeric($sValeur))
			        			$bValide = $this->ajouterErreur(mnt_reglement_sinistre_not_numeric);
					    	break;
					    case "NE":
						   // Verification nouveau num  de contrat :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(numcontrat_new_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(numcontrat_new_spechar);
					    	break;
					     case "NM":
						   // Verification num compte :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(numcompte_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(numcompte_spechar);
					    	break;
				    	case "NN":
						   // Verification num contrat :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(numcontrat_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(numcontrat_spechar);
					    	break;
				    	case "NO":
						   // Verification nom :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(nom_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(nom_spechar);
					    	break;
					    case "OF":
						   // Verification offre :  
		            		if(!isset($sValeur) || $sValeur == "" || $sValeur == 0)
			        			$bValide = $this->ajouterErreur(offre_vide);
					    	break;	
					   	case "OR":
						   // Verification choix mode réglement sinistre :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(choix_reglement_non_selectionne);
					    	break;			    
				    	case "PN":
						   // Verification prenom :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(prenom_vide);
			        		elseif(caracteres_interdits_PN($sValeur)==1)
			        			$bValide = $this->ajouterErreur(prenom_spechar);
					    	break;	
					    case "PR":
						   // Verification produit :  
		            		if(!isset($sValeur) || $sValeur == "" || $sValeur == 0)
			        			$bValide = $this->ajouterErreur(produit_vide);
					    	break;
				    	case "PW":
						   // Verification mot de passe :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(admin_auth_pwd_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(admin_auth_pwd_spechar);
					    	break;	
				    	case "RE":
						   // Verification ref externe :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(refexterne_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(refexterne_spechar);
					    	break;
					   case "RM":
						   // Verification mnt reglement echeance:  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(mtt_regl_vide);
			        		elseif(!is_numeric($sValeur))
			        			$bValide = $this->ajouterErreur(mtt_regl_not_numeric);
					    	break;
					    case "RR":
						   // Verification ref reglement :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(refreglement_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(refreglement_spechar);
					    	break;
				    	case "RS":
						   // Verification raison sociale :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(raisonsoc_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(raisonsoc_spechar);
					    	break;
				    	case "SX":
						   // Verification sexe :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(sexe_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(sexe_spechar);
					    	break;
				    	case "TY":
						   // Verification type :  
		            		if(!isset($sValeur) || $sValeur == "")
			        			$bValide = $this->ajouterErreur(type_vide);
			        		elseif(caracteres_interdits_2($sValeur)==1)
			        			$bValide = $this->ajouterErreur(type_spechar);
					    	break;					    					    
					    case "SX":
						   // Verification formule :  
		            		if(!isset($sValeur) || $sValeur == "" || $sValeur == 0)
			        			$bValide = $this->ajouterErreur(sexe_vide);
					    	break;
						default:
						    $sErreur = "'".$sNomInfo."' : ".self::_ERREUR_VIDE;
						    if(!isset($sValeur) || $sValeur == "")
                    			$bValide = $this->ajouterErreur($sErreur);
						    break;
						}
                }//on ne traite que les mandatory obligatoire
                
             	
            	if (strcmp($sNom, 'ODE_Date_debut_edition')==0)
             	{
             		$sDate_Debut_edition = $sValeur;
             	}
	            if (strcmp($sNom, 'ODF_Date_fin_edition')==0)
            	{
             		$sDate_Fin_edition = $sValeur;
             	}
           		if (strcmp($sNom, 'ODE_Date_debut_stat')==0)
             	{
             		$sDate_Debut_stat = $sValeur;
             	}
	            if (strcmp($sNom, 'ODF_Date_fin_stat')==0)
             	{
             		$sDate_Fin_stat = $sValeur;
             	}
	            if (strcmp($sNom, 'OMP_montant_prestation')==0)
	            {
	            	$iMontantPre = $sValeur;
	            }
           	    if (strcmp($sNom, 'OMS_montant_reglement_sinistre')==0)
	            {
	            	$iMontantReg = $sValeur;	
	            }
            }//fin foreach
            
           
            
            if (controle_dates($sDate_Debut_edition, $sDate_Fin_edition))
            {
            	$bValide = $this->ajouterErreur(dates_debut_fin_editions_incorrect);
            }
         	if (controle_dates($sDate_Debut_stat, $sDate_Fin_stat))
            {
            	$bValide = $this->ajouterErreur(dates_debut_fin_stat_incorrect);
            }
         	if (strcmp($iMontantPre, $iMontantReg)!=0)
            {
              	$bValide = $this->ajouterErreur(montant_reg_montant_pre_different);
            }
         
        }
        /*else
        {
            $sErreur = $sNom." : ".self::_ERREUR_POST;
            $bValide = ajouterErreur($sErreur);
        }*/
        return $bValide;
    }
    
    function ajouterErreur($sErreur)
    {
    	array_push($this->_erreurs, $sErreur);
    	$_SESSION['information'][] = $sErreur;
    	$bValide = false;
    	
    	return $bValide;
    }
    
	function initErreur()
    {
    	$_SESSION['information']= array();
    	return true;
    }
    
	function getValidMessage()
    {
	    $aMsg  = array();
	    if(isset($_SESSION['information']))
			foreach ($_SESSION['information'] as $i=> $sMessage)
		    {	
		    	if($i>0) break;
		    	$aMsg[$i] = array("message"=> colorer(htmlentities($sMessage, ENT_COMPAT, 'utf-8'), "false"));
		    	
		    }
    	return $aMsg;
    }
}
?>
